package P054_String_StringBuffer_StringBuilder;

import org.junit.Test;

/**
 * Desc:&emsp;&ensp;正确使用String、StringBuffer、StringBuilder
 *   1-使用String类的场景
 *      在字符串不经常变化的场景中可以使用string类，例如常量的声明、少量的变量运算等。
 *   2-使用StringBuffer类的场景
 *      在频繁进行字符串的运算（如拼接、替换、删除等），并且运行在多线程的环境中，则
 *   可以考虑使用StrmgBuffer,例如XML解析、HTTP参数解析和封装等。
 *   3-使用StringBuilder类的场景
 *      在频繁进行字符串的运算（如拼接、替换、删除等），并且运行在单线程的环境中，则
 *   可以考虑使用StringBuilder，如SQL语句的拼装、JSON封装等。
 * @author 李渊&emsp;liyuan7@yusys.com.cn
 * @version 1.0
 * @since V4.3&emsp;2022/3/24
 */
public class String_StringBuffer_StringBuilder {

    @Test
    public void Test1() {
        // String 不可变；str.substring(0)返回自己
        System.out.println("abc"=="abc".substring(0));
        // StringBuffer 可变
        // +拼接的各个子字符串在常量池中仍然存在
        String s1 = "a";
        s1 = s1 + "b";
        // StringBuffer拼接的c和d都在常量池中不存在
        StringBuffer s2 = new StringBuffer("c");
        s2.append("d");
        /* StringBuffer和StringBuilder除了前者线程安全外，没有其他区别
            这两者都是字符数组扩容，而String的操作都是新建对象，更慢
         */
    }
}
